package n3083;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {

	static int w,h;
	
	static String[] maze=new String[40];
	static int[][] dir_left={{0,-1},{-1,0},{0,1},{1,0}};
	static int[][] dir_right={{0,1},{-1,0},{0,-1},{1,0}};
	static boolean flag=false;
	static int globalCount=0;
	static int sx,sy,ex,ey;
	static void dfs_left(int x,int y,int count,int dir)
	{
		if(x==ex&&y==ey)
		{
			if(flag==false)
			{
				globalCount=count;
			}
			flag=true;
			return;
		}
		
		if(flag==false)
		{
			if(x<0||x>=h||y<0||y>=w||maze[x].charAt(y)=='#')return;
			
			for(int i=0;i<dir_left.length;i++)
			{
				int tx=x,ty=y;
				tx+=dir_left[(i+dir)%4][0];
				ty+=dir_left[(i+dir)%4][1];
				if(tx<0||tx>=h||ty<0||ty>=w||maze[tx].charAt(ty)=='#')
				{
					continue;
				}else{
					int nextdir=-1;
					if(dir_left[(i+dir)%4][0]==0&&dir_left[(i+dir)%4][1]==1)nextdir=1;
					else if(dir_left[(i+dir)%4][0]==0&&dir_left[(i+dir)%4][1]==-1)nextdir=3;
					else if(dir_left[(i+dir)%4][0]==1&&dir_left[(i+dir)%4][1]==0)nextdir=2;
					else if(dir_left[(i+dir)%4][0]==-1&&dir_left[(i+dir)%4][1]==0)nextdir=0;
					dfs_left(tx, ty, count+1,nextdir);
					break;
				}
			}
		}
	}
	
	static void dfs_right(int x,int y,int count,int dir)
	{
		if(x==ex&&y==ey)
		{
			if(flag==false)
			{
				globalCount=count;
			}
			flag=true;
			return;
		}
		
		if(flag==false)
		{
			if(x<0||x>=h||y<0||y>=w||maze[x].charAt(y)=='#')return;
			int[] a={0,3,2,1};
			for(int i=0;i<dir_right.length;i++)
			{
				int tx=x,ty=y;
				tx+=dir_right[(a[dir]+i)%4][0];
				ty+=dir_right[(a[dir]+i)%4][1];
				if(tx<0||tx>=h||ty<0||ty>=w||maze[tx].charAt(ty)=='#')
				{
					continue;
				}else{
					int nextdir=-1;
					if(tx-x==0&&ty-y==1)nextdir=1;
					else if(tx-x==0&&ty-y==-1)nextdir=3;
					else if(tx-x==1&&ty-y==0)nextdir=2;
					else if(tx-x==-1&&ty-y==0)nextdir=0;
					dfs_right(tx, ty, count+1,nextdir);
					break;
				}
			}
		}
	}
	
	
	
	static int bfs(int x,int y)
	{
		 int[][] path=new int[w*h+1][3];
		 boolean[][] visit=new boolean[h][w];
		 int count=0;
		 int depth=0;
		 int i=0;
		 path[count][0]=x;
		 path[count][1]=y;
		 path[count][2]=depth;
		 count++;
		 visit[x][y]=true;
		 while(i<count)
		 {
			 x=path[i][0];
			 y=path[i][1];
			 depth=path[i][2];
			 if(x==ex&&y==ey){
				 return depth+1;
			 }
			 for(int j=0;j<dir_left.length;j++)
			 {
				 int tx=x+dir_left[j][0];
				 int ty=y+dir_left[j][1];
				 if(tx<0||tx>=h||ty<0||ty>=w||maze[tx].charAt(ty)=='#'||visit[tx][ty]){
					continue; 
				 }else{
					 path[count][0]=tx;
					 path[count][1]=ty;
					 path[count][2]=depth+1;
					 visit[tx][ty]=true;
					 count++;
				 }
			 }
			 i++;
		 }
		 return -1;
	}
	
	
	/**
	 * @param args
	 */
	public static void main(String[] args) throws Exception{
		// TODO Auto-generated method stub

		BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));
		String line=bf.readLine();
		int n=Integer.parseInt(line);
		for(int i=0;i<n;i++)
		{
			line=bf.readLine();
			StringTokenizer st=new StringTokenizer(line);
			w=Integer.parseInt(st.nextToken());
			h=Integer.parseInt(st.nextToken());
			sx=-1;sy=-1;ex=-1;ey=-1;
			flag=false;
			globalCount=0;
			
			
			for(int j=0;j<h;j++)
			{
				line=bf.readLine();
				maze[j]=line;
				for(int k=0;k<line.length();k++)
				{
					if(sx==-1&&line.charAt(k)=='S'){
						sx=j;
						sy=k;
					}
					if(ex==-1&&line.charAt(k)=='E')
					{
						ex=j;
						ey=k;
					}
				}
			}
			int dir=-1;
			if(sx==0){
				dir=2;
			}else if(sy==0)
			{
				dir=1;
			}else if(sx==h-1)
			{
				dir=0;
			}else{
				dir=3;
			}
			dfs_left(sx, sy, 1,dir);
			System.out.print(globalCount);
			
			flag=false;
			globalCount=0;
			
			dfs_right(sx, sy, 1, dir);
			
			System.out.print(" "+globalCount);
			
			globalCount=bfs(sx, sy);
			
			System.out.print(" "+globalCount);
			
			System.out.println();
		}
	}

}
